/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modele;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

/**
 *
 * @author Nishruu
 */
public class Projet {

    private int id_projet;
    private String nom;
    private String date_debut;
    private String date_fin;
    private ArrayList<Integer> equipes;
    private Formateur formateur;
    private Session_diplome session_diplome;

    /**
     *
     * @param id_projet
     * @param nom
     * @param date_debut
     * @param date_fin
     * @param equipes
     * @param formateur
     * @param session_diplome
     */
    public Projet(int id_projet, String nom, String date_debut, String date_fin, ArrayList<Integer> equipes, Formateur formateur,Session_diplome session_diplome ) {
        this.id_projet = id_projet;
        this.nom = nom;
        this.date_debut = date_debut;
        this.date_fin = date_fin;
        this.equipes = equipes;
        this.formateur = formateur;
        this.session_diplome = session_diplome;
    }

    /**
     *
     * @param id_projet
     * @param nom
     * @param date_debut
     * @param date_fin
     * @param formateur
     * @param session_diplome
     */
    public Projet(int id_projet, String nom, String date_debut, String date_fin, Formateur formateur,Session_diplome session_diplome ) {
        this.id_projet = id_projet;
        this.nom = nom;
        this.date_debut = date_debut;
        this.date_fin = date_fin;
        this.formateur = formateur;
        this.session_diplome = session_diplome;
    }

    /**
     *
     * @return
     */
    public Session_diplome getSession_diplome() {
        return session_diplome;
    }

    /**
     *
     * @return
     */
    public String getDate_debut() {
        return date_debut;
    }

    /**
     *
     * @param date_debut
     */
    public void setDate_debut(String date_debut) {
        this.date_debut = date_debut;
    }

    /**
     *
     * @return
     */
    public String getDate_fin() {
        return date_fin;
    }

    /**
     *
     * @param date_fin
     */
    public void setDate_fin(String date_fin) {
        this.date_fin = date_fin;
    }

    /**
     *
     * @return
     */
    public int getId_projet() {
        return id_projet;
    }

    /**
     *
     * @param id_projet
     */
    public void setId_projet(int id_projet) {
        this.id_projet = id_projet;
    }

    /**
     *
     * @return
     */
    public String getNom() {
        return nom;
    }

    /**
     *
     * @param nom
     */
    public void setNom(String nom) {
        this.nom = nom;
    }

    /**
     *
     * @return
     */
    public ArrayList<Integer> getEquipes() {
        return equipes;
    }

    /**
     *
     * @return
     */
    public Formateur getFormateur() {
        return formateur;
    }

    /**
     *
     * @param formateur
     */
    public void setFormateur(Formateur formateur) {
        this.formateur = formateur;
    } 

   /** Mettre à jour les paramètres d'un projet.
   *
   * @return
   * @throws java.sql.SQLException
   */
    public boolean updateProjet() throws SQLException{
        Connection connexion = null;
        Statement select = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "UPDATE projet SET nom='"+nom+"', date_debut='"+date_debut+"', date_fin='"+date_fin+"', id_formateur='"+formateur.getId_formateur()+"', id_session='"+session_diplome.getId_session()+"' WHERE id_projet='"+id_projet+"'";
          select.executeQuery(sql);
        } finally {
            BD.close(select);
            BD.close(connexion);
        }
        return true;
    }

   /** Create un projet.
   *
   * @return
   * @throws java.sql.SQLException
   */
    public boolean createProjet() throws SQLException{
        Connection connexion = null;
        Statement select = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "INSERT INTO projet(nom,date_debut,date_fin,id_formateur,id_session) VALUES ('"+nom+"','"+date_debut+"','"+date_fin+"','"+formateur.getId_formateur()+"','"+session_diplome.getId_session()+"')";
          select.executeQuery(sql);
          sql = "SELECT id_projet FROM projet ORDER BY id_projet DESC LIMIT 1";
          ResultSet rs = select.executeQuery(sql);
          if (rs.next()) {
            id_projet = rs.getInt("id_projet");
          }
        } finally {
            BD.close(select);
            BD.close(connexion);
        }
        return true;
    }
    /** Supprimer un projet.
   *
   * @return
   * @throws java.sql.SQLException
   */
    public boolean suppressProjet() throws SQLException{
        Connection connexion = null;
        Statement select = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "DELETE FROM projet WHERE id_projet='"+id_projet+"'";
          select.executeQuery(sql);
        } finally {
            BD.close(select);
            BD.close(connexion);
        }
        return true;
    }

   /** Obtenir le projet d'id pro_id. Null si pas trouv�.
   *
    * @param id_projet
   * @return
   * @throws java.sql.SQLException
   */
    public static Projet getById(int id_projet) throws SQLException{
        Projet result = null;
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "SELECT * FROM projet WHERE id_projet= '" + id_projet + "'";
          rs = select.executeQuery(sql);
          if (rs.next()) {
            result = new Projet(rs.getInt("id_projet"), rs.getString("nom"),(""+rs.getTimestamp("date_debut")).substring(0, 10), (""+rs.getTimestamp("date_fin")).substring(0, 10),getEquipesID(id_projet), Formateur.getById(rs.getInt("id_formateur")), Session_diplome.getById(rs.getInt("id_session")));
          }
        }  finally {
            BD.close(rs);
            BD.close(select);
            BD.close(connexion);
        }
        return result;
    }

    /**
     *
     * @param name
     * @return
     * @throws SQLException
     */
    public static ArrayList<Projet> getByName(String name) throws SQLException{
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;
        ArrayList<Projet> projetList = null;
        try {
          projetList = new ArrayList<Projet>();
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql = "SELECT id_projet FROM projet WHERE nom LIKE '%" + name + "%'";
          rs = select.executeQuery(sql);
          while (rs.next() != false) {
                projetList.add(Projet.getById(rs.getInt("id_projet")));
            }
          if(projetList.isEmpty())
              return null;
        }  finally {
            BD.close(rs);
            BD.close(select);
            BD.close(connexion);
        }
        return projetList;
    }

   /** Obtenir les ID des groupes li�s au projet. Null si pas trouv�.
   *
    * @param id_projet
    * @return
   * @throws java.sql.SQLException
   */
    public static ArrayList<Integer> getEquipesID(int id_projet) throws SQLException{
        Connection connexion = null;
        Statement select = null;
        ResultSet rs = null;
        ArrayList<Integer> equipes = null;
        try {
          connexion = BD.connect();
          select = connexion.createStatement();
          String sql =
                  "SELECT E.id_equipe FROM PROJET P, EQUIPE E WHERE P.id_projet = E.id_projet AND E.id_projet = '" + id_projet + "'";
          rs = select.executeQuery(sql);
          int g;
          equipes = new ArrayList<Integer>();
          while (rs.next() != false) {
            g = rs.getInt("id_equipe");
            equipes.add(g);
          }
        } finally {
            BD.close(rs);
            BD.close(select);
            BD.close(connexion);
        }
        return equipes;
    }

  /** Obtenir les groupes li�s au projet. Null si pas trouv�.
   *
   * @param id_projet
   * @return
   * @throws java.sql.SQLException
   */
    public static ArrayList<Equipe> getEquipes(int id_projet) throws SQLException{
        ArrayList<Integer> equipesID = getEquipesID(id_projet);
        ArrayList<Equipe> equipes = new ArrayList<Equipe>();
        for(int i =0; i<equipesID.size(); i++){
            equipes.add(Equipe.getById(equipesID.get(i)));
        }
        return equipes;
    }
    
    
    @Override
    public boolean equals(Object projet){
        return (id_projet==((Projet)projet).getId_projet()
                &&nom.equals(((Projet)projet).getNom())
                &&date_debut.equals(((Projet)projet).getDate_debut())
                &&date_fin.equals(((Projet)projet).getDate_fin())
                &&(equipes.equals(((Projet)projet).getEquipes())||(equipes.isEmpty()&&((Projet)projet).getEquipes().isEmpty()))
                &&formateur.equals(((Projet)projet).getFormateur())
                &&session_diplome.equals(((Projet)projet).getSession_diplome())
                );
    }
}
